import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/**
 * ArrayList集合的常用方法演示
 */
public class ArrayListMethod {

    /**
     * 1.void add(int index, E element)
     * 在指定位置插入元素，后面的元素都往后移一个元素。
     */
    @Test
    public void ListAddTest1(){
        List list = new ArrayList();
        list.add("demo1");
        list.add("demo2");
        list.add("demo3");
        System.out.println("插入元素前集合："+list);
        list.add("demo4");
        System.out.println("插入元素后集合："+list);
    }

    /**
     * 2.boolean addAll(int index, Collection<? extends E> c)
     * 在指定的位置中插入c集合全部的元素，如果集合发生改变，则返回true，否则返回false。
     * 意思就是当插入的集合c没有元素，那么就返回false，如果集合c有元素，插入成功，那么就返回true
     */
    @Test
    public void ListAddAllTest2(){
        List list1 = new ArrayList();
        List list2 = new ArrayList();
        List list3 = new ArrayList();
        list1.add("demo1");
        list1.add("demo2");
        list1.add("demo3");
        list2.add("test1");
        list2.add("test2");
        System.out.println("没有操作前list1中所有元素"+list1);
        System.out.println("没有操作前list2中所有元素"+list2);
        System.out.println("没有操作前list3中所有元素"+list3);
        Boolean b = list1.addAll(2,list2);
        System.out.println("list1插入list2后，list1的所有元素："+list1);
        System.out.println("list1插入list2的返回值是"+b);
        b = list1.addAll(2,list3);
        System.out.println("list1插入list3后，list1的所有元素："+list1);
        System.out.println("list1插入list3的返回值是"+b);
    }

    /**
     * 3.E get(int index)
     * 返回list集合中指定索引位置的元素
     */
    @Test
    public void ListGetTest(){
        List list = new ArrayList();
        list.add("demo1");
        list.add("demo2");
        list.add("demo3");
        Object obj = list.get(2);
        System.out.println(obj);
    }

    /**
     * 4.int indexOf(Object o)
     * 返回list集合中第一次出现o对象的索引位置，如果list集合中没有o对象，那么就返回-1
     */
    @Test
    public void ListIndexOfTest(){
        List list = new ArrayList();
        list.add("demo1");
        list.add("demo2");
        list.add("demo1");
        list.add("demo2");
        int i = list.indexOf("demo2");
        System.out.println("所有元素："+list);
        System.out.println("第一次出现demo2的索引位置："+i);
        i = list.indexOf("demo3");
        System.out.println("第一次出现demo3的索引位置："+i);
    }
    /**
     * 5.ListIterator<E> listIterator()
     * 返回此列表元素的列表迭代器（按适当顺序）。
     */
    @Test
    public void ListIteratorTest(){
        List list = new ArrayList();
        list.add("demo1");
        list.add("demo2");
        list.add("demo1");
        list.add("demo2");
        ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()){
            System.out.print(listIterator.next());
        }
    }
    /**
     * 6.E remove(int index)
     * 删除指定索引的对象
     */
    @Test
    public void ListRemoveTest(){
        List list = new ArrayList();
        list.add("test1");
        list.add("test2");
        list.add("test3");
        list.add("test4");
        list.add("test5");
        System.out.println("删除元素之前所有元素"+list);
        list.remove(2);
        System.out.println("删除下表为2的元素之后"+list);
    }

    /**
     * 7.E set(int index, E element)
     * 在索引为index位置的元素更改为element元素
     */
    @Test
    public void ListSetTest(){
        List list = new ArrayList();
        list.add("test1");
        list.add("test2");
        list.add("test3");
        list.add("test4");
        System.out.println("替换元素之前"+list);
        list.set(1,"demo2");
        System.out.println("替换下表1的元素之后"+list);
    }
    /**
     * 8.List<E> subList(int fromIndex, int toIndex)
     * 返回从索引fromIndex到toIndex的元素集合，包左不包右
     */
    @Test
    public void ListSubListTest(){
        List list = new ArrayList();
        list.add("test1");
        list.add("test2");
        list.add("test3");
        list.add("test4");
        List list1 = list.subList(1, 3);
        System.out.println(list1);
    }
}
